【概念篇】生成器Generator和迭代器Interator
迭代器Interator
实质
依次获取容器内的元素,没获取一次可标记获取元素的位置。
- 可循环获取元素的类型均可称之可迭代类型
- 迭代器就是实现了工厂模式的对象,在询问下一个数据时返回
包含类型
- 列表
- 字典
- set
小例子
#可迭代对象
x = [1,2,3]
y = iter(x)
next(y) # 1
next(y) # 2
# 无限迭代器
from itertools import count
counter = count(start=13)
next(counter)
# 有限序列对应的无限迭代器(循环提取)
from itertools import cycle
colors = cycle(['red', 'white', 'blue'])
next(colors)
# 无限序列产生有限迭代器
from itertools import islice
colors = cycle(['red', 'white', 'blue'])
limited = islice(colors, 0, 4)
生成器Generator
实质
一种特殊的迭代器。
生成器实质是定义了所需的计算模式,但是在实际需要的时候才会计算相应位置的数据。即实现了延迟操作。
在函数计算中,不通过return返回结果,而是yield返回类似迭代器的东东
实现类型
- 生成器函数
- 生成器表达式
小例子
# 生成器函数和一般函数
def generat(N):
for i in range(N):
yield i ** 2
def squares(N):
res = []
for i in range(N):
res.append(i ** 2)
return res
# 生成器表达式和一般表达式
generat = (i**2 for i in range(5))
squares = [i**2 for i in range(5)]
优点
- 优化内存,减少存储空间的使用
- 增强代码可读性